package com.cotasul.persistencia;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.cotasul.bean.TipoBean;
import com.cotasul.persistencia.config.GerenciadorConexao;
import com.cotasul.persistencia.config.SQLConfiguracao;
import com.cotasul.persistencia.enums.EnumCondicao;
import com.cotasul.persistencia.interfaces.ITipoDao;

public class TipoDao<P extends TipoBean> extends DaoGenerico<P> implements
		ITipoDao<P> {

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void alterar(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public Map<String, Long> salvar(P p) throws Exception {
		long maxCod = 0;
		try {
			query = SQLConfiguracao.getInstance().getValor("localiza_max_tipo");
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			if (rs.next()) {
				maxCod = rs.getInt("MAXCOD");
			}
			query = SQLConfiguracao.getInstance().getValor("insere_tipo");
			ps = conn.prepareStatement(query);
			ps.setLong(1, maxCod);
			ps.setString(2, p.getDescricao());
			ps.execute();
			conn.commit();

		} catch (Exception e) {
			throw e;
		}
		Map<String, Long> retorno = new HashMap<String, Long>();
		retorno.put("", maxCod);
		return retorno;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<P> buscaTipos() throws Exception {
		List<P> listaTipos = new ArrayList<P>();
		TipoBean p = null;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor("localiza_tipos");
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			while (rs.next()) {
				p = new TipoBean();
				p.setCodigo(rs.getLong("IDTIPO"));
				p.setDescricao(rs.getString("DESCRICAO"));
				listaTipos.add((P) p);
			}
		} catch (Exception e) {
			throw e;
		}
		return listaTipos;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<P> buscaTipoFiltro(String descricao) throws Exception {

		List<P> listaTipos = new ArrayList<P>();
		TipoBean p = null;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor("localiza_tipos");
			query += " AND DESCRICAO LIKE ?";
			ps = conn.prepareStatement(query);
			ps.setString(1, "%%"+descricao+"%%");
			rs = ps.executeQuery();
			while (rs.next()) {
				p = new TipoBean();
				p.setCodigo(rs.getLong("IDTIPO"));
				p.setDescricao(rs.getString("DESCRICAO"));
				listaTipos.add((P) p);
			}
		} catch (Exception e) {
			throw e;
		}
		return listaTipos;

	}

	@Override
	public void preSalvar(P p) {
	}

	public void exluir(P p) throws Exception {
		try {
			query = SQLConfiguracao.getInstance().getValor("excluir_tipo");
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query);
			ps.setLong(1, p.getCodigo());
			ps.execute();
			conn.commit();
		} catch (Exception e) {
			throw e;
		}
	}

}
